package unq_ui.tp_robots_web_wicket;

import java.util.List;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxButton;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.markup.repeater.data.ListDataProvider;
import org.apache.wicket.model.CompoundPropertyModel;
import robots.domain.Robot;
import robots.excepcions.DineroInsuficienteException;
import robots.excepcions.RobotEnNullException;
import robots.models.CompraRobotAppModel;
import robots.models.JugadorAppModel;
import unq_ui.tp_robots_web_wicket.tools.BotonVolver;
import unq_ui.tp_robots_web_wicket.tools.TablaRobots;

public class CompraPage extends WebPage {

	final private Idioma idioma;
	private static final long serialVersionUID = 1L;
	private CompraRobotAppModel compraModel;
	private JugadorAppModel modelAnterior;
	private Form<CompraRobotAppModel> formCompra;
	final private FeedbackPanel feedback = new FeedbackPanel("feedback");
	final private FeedbackPanel feedbackRobotSeleccionado = new FeedbackPanel("robotSeleccionado");
	

	public CompraPage(CompraRobotAppModel modelCompra, JugadorAppModel modelAnterior, Idioma idioma) {
		
		this.idioma= idioma;
		this.modelAnterior= modelAnterior;
		this.compraModel = modelCompra;
		this.formCompra = new Form<CompraRobotAppModel>(
				"formCompra",
				new CompoundPropertyModel<CompraRobotAppModel>(this.compraModel));
		this.addDatosJugador();
		DataView<Robot> tablaRobots= this.addTablaRobots("robots",this.compraModel.getRobotsDelSistema());
		Form<CompraRobotAppModel> form= this.addAcciones();
		add(formCompra);
        feedback.setOutputMarkupId(true);
        feedbackRobotSeleccionado.setOutputMarkupId(true);
        add(feedback);
        add(feedbackRobotSeleccionado);
        
        agregarLabelsIdiomaEnPagina();
        agregarLabelsIdiomaEnTabla(tablaRobots);
        agregarLabelsIdiomasEnForm(form);
	}

	private void agregarLabelsIdiomasEnForm(Form<CompraRobotAppModel> form) {
		form.add(new Label("textoOfertar",idioma.textoOfertar_5));
		form.add(new Label("textoVolver",idioma.textoVolver_5));
	}

	private void agregarLabelsIdiomaEnPagina() {
		add(new Label("cantidadDeDinero",idioma.cantidadDeDinero_5));
		add(new Label("robotSeleccionad",idioma.robotSeleccionado_5));
		
	}

	private void agregarLabelsIdiomaEnTabla(DataView<Robot> tablaRobots) {
		add(new Label("nombreTabla",idioma.nombreTabla_5));
		add(new Label("deterioroTabla",idioma.deterioroTabla_5));
		add(new Label("poderTotalTabla",idioma.poderTotalTabla_5));
		add(new Label("poderEfectivoTabla",idioma.poderEfectivoTabla_5));
		add(new Label("precioTabla",idioma.precioTabla_5));		
	}

	public void addDatosJugador() {
		add(new Label("cantDineroJugador", this.compraModel
				.getJugador().getDinero().toString()));
	}

	public TablaRobots addTablaRobots(String idTabla, List<Robot> robotsList) {
		
		final TablaRobots tablaSistema = new TablaRobots(idTabla, new ListDataProvider<Robot>(
				robotsList)) {
					private static final long serialVersionUID = -3956099551314116604L;
			@SuppressWarnings("rawtypes")
			public void populateItem(final Item item) {
                final Robot robot = (Robot) item.getModelObject();
                crearColumnasBasicasDeTabla(item);
                item.add(new Label("precio", robot.getPrecio().toString()));
                item.add(new AjaxLink<Robot>("seleccionar") {
					private static final long serialVersionUID = -8268561904224360361L;

					@Override
					public void onClick(AjaxRequestTarget target) {
						compraModel.setRobot(robot);
						success(compraModel.getNombreRobotSeleccionado());
						target.add(feedbackRobotSeleccionado);
					}
				});
            }
        }; 
        add(tablaSistema);
        return tablaSistema;
        }

	public Form<CompraRobotAppModel> addAcciones() {
		TextField<Integer> oferta = new TextField<Integer>("oferta");
		oferta.setRequired(true);
		formCompra.add(oferta);

		formCompra.add(new IndicatingAjaxButton("ofertar") {
			private static final long serialVersionUID = 4762105971939546100L;

			@Override
			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
				if (compraModel.getOferta() <= 0)
					target.appendJavaScript(" alert('"+ idioma.ingresaOferta_5 + "'); ");
				else {
				try {
					if (compraModel.ofertar()){
						target.add(formCompra);
						modelAnterior.setCompraVentaReparacionMejoraRespuest(idioma.hasCompradoA_5 + compraModel.getNombreRobotSeleccionado());
						setResponsePage(new MainPage(modelAnterior,idioma));
					}
					else{                
						error(idioma.ofertaRechazada_5);
						target.add(feedback);
					}
					Thread.sleep(1000);
				} catch (DineroInsuficienteException e) {
					error(idioma.dineroInsuficiente_5);
					target.add(feedback);
					return; 
				} catch (InterruptedException e) {
					e.printStackTrace();
					return; 
				} catch (RobotEnNullException e) {
					error(idioma.seleccioneRobot_5);
					target.add(feedback);
					return; 
				}
				}
				}
		});
		
		new BotonVolver("volver", formCompra, new MainPage(modelAnterior,idioma));
		
		return formCompra;
	}
}
